﻿using System;
using FTools.Interface;
using FTools.Persistencia;
using System.Data.SqlClient;
using FTools.Dominio;
using System.Collections;
using FTools.Generico;

namespace FTools.Comunicacion
{
    class ComFabricante : InterfaceFabricante
    {
        Conexion objConexion = new Conexion();
        SqlConnection conexion;
        SqlTransaction transaccion = null;
        PerFabricante objPerFabricante = new PerFabricante();

        public Fabricante obtenerFabricante(long xIdFabricante)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Fabricante objFabricante = objPerFabricante.obtenerFabricante(conexion, transaccion, xIdFabricante);
                transaccion.Commit();
                return objFabricante;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public Boolean existeFabricante(long xIdFabricante)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Boolean existe = objPerFabricante.existeFabricante(conexion, transaccion, xIdFabricante);
                transaccion.Commit();
                return existe;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public Boolean existeFabricante(String xNombre)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Boolean existe = objPerFabricante.existeFabricante(conexion, transaccion, xNombre);
                transaccion.Commit();
                return existe;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public ArrayList obtenerColeccionFabricante()
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                ArrayList colFabricante = objPerFabricante.obtenerColeccionFabricante(conexion, transaccion);
                transaccion.Commit();
                return colFabricante;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public int altaFabricante(Fabricante xObjFabricante)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                xObjFabricante.IdFabricante = FuncionesGenericas.generarNumerador("FABRICANTE");
                int nro = objPerFabricante.altaFabricante(conexion, transaccion, xObjFabricante);
                transaccion.Commit();
                return nro;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public int bajaFabricante(Fabricante xObjFabricante)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                int nro = objPerFabricante.bajaFabricante(conexion, transaccion, xObjFabricante);
                transaccion.Commit();
                return nro;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public int modificaFabricante(Fabricante xObjFabricante)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                int nro = objPerFabricante.modificaFabricante(conexion, transaccion, xObjFabricante);
                transaccion.Commit();
                return nro;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }
    }
}
